package it.fantacalcio.hibernate.dao;

import it.fantacalcio.model.Classifica;
import it.fantacalcio.model.Squadra;

import java.util.List;

import org.hibernate.Criteria;
import org.hibernate.Query;
import org.hibernate.criterion.Order;
import org.hibernate.criterion.Restrictions;

public class ClassificaDAOImpl extends BaseHibernateDAO implements
		ClassificaDAO {

	@Override
	public void save(Classifica classifica) throws Exception {
		getSession().save(classifica);
	}
	
	@Override
	public void delete(Classifica classifica) throws Exception {
		getSession().delete(classifica);
	
	}
	@Override
	public void update(Classifica classifica) throws Exception {
		getSession().saveOrUpdate(classifica);
	}

	@Override
	@SuppressWarnings("unchecked")
	public Classifica getByPosizione(int posizione) throws Exception {
		Criteria cri = getSession().createCriteria(Classifica.class);
		cri.addOrder(Order.desc("punti"));
		List<Classifica> results = cri.list();
		return results.get(posizione - 1);
	}

	@Override
	public Classifica getBySquadra(Squadra squadra) throws Exception {
		Criteria cri = getSession().createCriteria(Classifica.class);
		cri.add(Restrictions.eq("squadra", squadra));
		return (Classifica) cri.uniqueResult();
	}

	@Override
	public Classifica get(Long id) throws Exception {
		return (Classifica) getSession().get(Classifica.class, id);
	}

	@Override
	@SuppressWarnings("unchecked")
	public List<Classifica> list() throws Exception {
		Criteria cri = getSession().createCriteria(Classifica.class);
		cri.addOrder(Order.desc("punti"));
		List<Classifica> results = cri.list();
		return results;
	}
	
	@Override
	public void deleteAll() throws Exception {
		String queryString = "delete from Classifica";
		Query queryObject = getSession().createQuery(queryString);
		queryObject.executeUpdate();
	}

}
